package Day003_多态_内部类.demo004多态的应用;

/*
    1.变量多态-->意义不大
    2.形参多态-->常用
    3.返回值多态-->常用

 */

public class Test {
    public static void main(String[] args) {
        //1.变量多态
        Animal anl = new Dog();
        anl.eat();
        anl = new Cat();
        anl.eat();

        //2.参数多态
        //定义一个方法,可以传入Dog对象,又可以传入Cat对象,.....然后再方法中调用eat方法
       Dog dog = new Dog();
       Cat cat = new Cat();

       //调用Eat方法 传入dog对象
       Eat(dog);
        //调用Eat方法 传入cat对象
       Eat(cat);

       //3.返回值多态
        Animal anl2 = getAnimal(); // 返回的是地址
        System.out.println(anl2);

    }

//如果参数是父类类型,就可以接受该父类的一切子类对象(父类的引用可以指向子类的对象)
    //必须是static  因为main是static
    public static void Eat(Animal anl){     //实参赋值给形参 Animal anl = dog;
        anl.eat();                           //等价于Animal anl = new Dog();   anl.eat();

    }

//定义一个方法,可以返回Animal类或者Animal类的子类对象
    public static Animal getAnimal(){
        //return new Animal();
          return new Dog();
        //return new Cat();
    }
}
